package cn.tedu.mall.service;

import cn.tedu.mall.anno.CacheFind;
import cn.tedu.mall.mapper.ItemDescMapper;
import cn.tedu.mall.mapper.ItemMapper;
import cn.tedu.mall.pojo.Item;
import cn.tedu.mall.pojo.ItemDesc;
import cn.tedu.mall.vo.EasyUITable;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

@Service
public class ItemServiceImpl implements ItemService{
    @Autowired
    private ItemMapper itemMapper;
    @Autowired
    private ItemDescMapper itemDescMapper;

    /**
     * 业务：基于页码值和当前页显示的记录数查询每页商品列表数据
     * @param page：页码值
     * @param rows：总记录数
     * 分页查询的sql：select * from 表名 limit 当前页的第一条记录的下标值,当前页显示的记录条数
     */
    @Override
    public EasyUITable findItemByPage(Integer page, Integer rows) {
        //获取表中的总记录数
        int total=itemMapper.selectCount(null);
        //获取当前页的记录
        int start=(page-1)*rows;
        List<Item> itemList=itemMapper.findItemByPage(start,rows);
        return new EasyUITable(total,itemList);
    }

    @Override
    @Transactional  //是由Spring提供的事务管理机制，底层应用了AOP
    public void saveItem(Item item, ItemDesc itemDesc) {
        //新增商品数据
        Date date=new Date();
        item.setStatus(1);
        item.setCreated(date);
        item.setUpdated(date);
        itemMapper.insert(item);
        //新增商品详情数据
        itemDesc.setItemId(item.getId());
                itemDesc.setCreated(date);
                        itemDesc.setUpdated(date);
        //实现商品详情数据的入库
        itemDescMapper.insert(itemDesc);
    }

    @Override
    public ItemDesc findItemDescByItemId(Long itemId) {
        ItemDesc itemDesc = itemDescMapper.selectById(itemId);
        System.out.println("商品详情对象"+itemDesc);
        return itemDesc;
    }

    @Override
    @Transactional
    public void updateItem(Item item, ItemDesc itemDesc) {
        //更新商品数据
        item.setUpdated(new Date());
        //基于选中的要修改的商品数据的id去修改商品数据
        itemMapper.updateById(item);
        //更新商品详情数据
        itemDesc.setItemId(item.getId());
        itemDesc.setUpdated(item.getUpdated());
        itemDescMapper.updateById(itemDesc);
    }

    @Override
    @Transactional
    public void deleteItems(Long[] ids) {
        //将数组转换成集合
        List<Long> idList = Arrays.asList(ids);
        //基于id删除商品数据
        itemMapper.deleteBatchIds(idList);
        //基于id删除商品详情数据
        itemDescMapper.deleteBatchIds(idList);
    }

    @Override
    public void updateStatus(Long[] ids, int status) {
        Item item=new Item();
        item.setStatus(status);
        item.setUpdated(new Date());
        UpdateWrapper<Item> updateWrapper=new UpdateWrapper<>();
        //where id in()
        updateWrapper.in("id",Arrays.asList(ids));
        itemMapper.update(item,updateWrapper);
    }
}
